//package com.gome.gop.filter;
//
//import org.apache.commons.lang3.StringEscapeUtils;
//
//import javax.servlet.ReadListener;
//import javax.servlet.ServletInputStream;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletRequestWrapper;
//import java.io.BufferedReader;
//import java.io.ByteArrayInputStream;
//import java.io.IOException;
//import java.io.InputStreamReader;
//import java.nio.charset.Charset;
//
//public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
//    public XssHttpServletRequestWrapper(HttpServletRequest request) {
//        super(request);
//    }
//
//    @Override
//    public String[] getParameterValues(String parameter) {
//        String[] values = super.getParameterValues(parameter);
//        if (values == null) {
//            return null;
//        }
//        int count = values.length;
//        String[] encodedValues = new String[count];
//        for (int i = 0; i < count; i++) {
//            encodedValues[i] = cleanXSS(values[i]);
//        }
//        return encodedValues;
//    }
//
//    @Override
//    public String getParameter(String parameter) {
//        String value = super.getParameter(parameter);
//        if (value != null) {
//            return cleanXSS(value);
//        }
//        return null;
//    }
//
//    @Override
//    public String getHeader(String name) {
//        String value = super.getHeader(name);
//        if (value == null)
//            return null;
//        return cleanXSS(value);
//    }
//
//    private static String cleanXSS(String value) {
//        value = value.replaceAll("<", "").replaceAll(">", "");
//        value = value.replaceAll("%3C", "").replaceAll("%3E", "");
//        value = value.replaceAll("\\(", "").replaceAll("\\)", "");
//        value = value.replaceAll("%28", "").replaceAll("%29", "");
//        value = value.replaceAll("'", "");
//        value = value.replaceAll("eval\\((.*)\\)", "");
//        value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
//        value = value.replaceAll("script", "");
//        //payload：<sCriPt>alert(1)</scRipt>
//
//        value = value.replace("alert","");
////        if(value.contains("alert")){
////            value = StringEscapeUtils.escapeEcmaScript(value);
////            System.out.println(value);
////        }
//
//
//        return value;
//    }
//
//    @Override
//    public ServletInputStream getInputStream() throws IOException {
//        final ByteArrayInputStream bais = new ByteArrayInputStream(inputHandlers(super.getInputStream()).getBytes());
//
//        return new ServletInputStream() {
//
//            @Override
//            public int read() throws IOException {
//                return bais.read();
//            }
//
//            @Override
//            public boolean isFinished() {
//                return false;
//            }
//
//            @Override
//            public boolean isReady() {
//                return false;
//            }
//
//            @Override
//            public void setReadListener(ReadListener readListener) {
//            }
//        };
//    }
//
//    public String inputHandlers(ServletInputStream servletInputStream) {
//        StringBuilder sb = new StringBuilder();
//        BufferedReader reader = null;
//        try {
//            reader = new BufferedReader(new InputStreamReader(servletInputStream, Charset.forName("UTF-8")));
//            String line = "";
//            while ((line = reader.readLine()) != null) {
//                sb.append(line);
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        } finally {
//            if (servletInputStream != null) {
//                try {
//                    servletInputStream.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//            if (reader != null) {
//                try {
//                    reader.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//        }
//        return cleanXSS(sb.toString());
//    }
//}
